<?php

/**
 * 定义：动态地给一个对象添加一些额外的职责。就增加功能来说，装饰模式相比生成子类更为灵活。
 */
class DecoratorOrder extends Order{
    private $order;
    function __construct(Order $order){
        $this->order=$order;
    }
    function create(){
        $this->order->create();
        $this->SendNotice();
    }
    function SendNotice(){
        echo "发送通知\n";
    }
}
class Order{
    public function create(){
        echo  "创建订单\n";
    }
}

function main(Order $order){
    $order->create();
}
$order = new Order();
$order->create();
$order = new DecoratorOrder($order);
$order->create();